/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package DTD;

import Excepciones.DTDException;
import Excepciones.InvalidReadException;
import Utilidades.LectorXML;
import java.io.FileNotFoundException;

/**
 *
 * @author Administrador
 */
public class ParserDTD {

    private LectorDTD dtdReader;
    private String[] reglasExternas;
    private String[] reglasInternas;
    private DTDValidador dtdValidador;

    public ParserDTD(LectorXML reader) throws DTDException {
        try {
            this.dtdReader = new LectorDTD(reader);
            this.reglasExternas = this.dtdReader.getReglasExternas();
            this.reglasInternas = this.dtdReader.getReglasInternas();
            this.tryGenerarValidadorDTD();
        } catch (InvalidReadException ex) {
            String msg = ex.getMessage();
            throw new DTDException(msg);
        } catch (FileNotFoundException ex) {
            String msg = ex.getMessage();
            throw new DTDException(msg);
        }
    }

    public DTDValidador getDtdValidador() {
        return dtdValidador;
    }

    private synchronized void tryGenerarValidadorDTD() throws DTDException {
        DTDGenerarValidador dtdValidatorGenerator = new DTDGenerarValidador();

        for (int i = 0; reglasExternas != null && i < reglasExternas.length; i++) {
            String regla = reglasExternas[i];
            dtdValidatorGenerator.tryGenerarValidador(regla, false);
        }

        for (int i = 0; reglasInternas != null && i < reglasInternas.length; i++) {
            String regla = reglasInternas[i];
            dtdValidatorGenerator.tryGenerarValidador(regla, true);
        }

        dtdValidatorGenerator.commit();
        this.dtdValidador = dtdValidatorGenerator.getDTDValidador();
    }

}
